package model.comunication;

import java.util.List;

import model.Area;
import model.Curso;
import model.dba.CursoDAO;

public class ICurso {
	private CursoDAO cursoDAO;
	private static ICurso cursoInterface;

	private ICurso() {
		this.cursoDAO = CursoDAO.getInstance();
	}

	public static ICurso getInstance() {
		if (cursoInterface == null) {
			cursoInterface = new ICurso();
		}
		return cursoInterface;
	}

	/**
	 * Crea el objeto
	 * 
	 * @param nombre
	 * @param descripcion
	 * @param horasTotales
	 * @param areas
	 *            1 solo por el momento
	 * @param temario
	 * @return
	 */
	public Curso getCurso(String nombre, String descripcion, Integer horasTotales, int idArea, String temario, String eliminado) {
		return new Curso(nombre, descripcion, horasTotales, idArea, temario, eliminado);
	}

	/**
	 * Crea el objeto
	 * 
	 * @param id
	 * @param nombre
	 * @param descripcion
	 * @param horasTotales
	 * @param areas
	 * @param temario
	 * @return
	 */
	public Curso getCurso(Integer id, String nombre, String descripcion, Integer horasTotales, List<Area> areas, String temario) {
		return new Curso(id, nombre, descripcion, horasTotales, areas, temario);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param id
	 * @return
	 */
	public Curso getCurso(Integer id) {
		return this.cursoDAO.get(id);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param id
	 * @return
	 */
	public Curso getCurso(String nombre) {
		return this.cursoDAO.get(nombre);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param id
	 * @return
	 */
	// public List<Curso> getCurso(Area area) {
	// return this.cursoDAO.get(area);
	// }
	public List<Curso> getCurso(int area) {
		return this.cursoDAO.get(area);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @return
	 */
	public List<Curso> getAllCursos() {
		return this.cursoDAO.getAll();
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param curso
	 * @return
	 */
	public Integer addCurso(Curso curso) {
		return this.cursoDAO.add(curso);

	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param curso
	 * @return
	 */
	public boolean updateCurso(Curso curso) {
		return this.cursoDAO.update(curso);

	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param curso
	 * @return
	 */
	public boolean deleteCurso(Curso curso) {
		return this.cursoDAO.delete(curso);

	}
}
